package com.parking.mgr.useraccount.enums;


import com.parking.mgr.common.annotion.ExpEnumType;
import com.parking.mgr.common.constant.SysExpEnumConstant;
import com.parking.mgr.common.exception.BaseException;
import com.parking.mgr.common.exception.ServiceException;
import com.parking.mgr.common.exception.asserts.Assertion;
import com.parking.mgr.common.exception.enums.IBaseExceptionEnum;
import com.parking.mgr.common.factory.ExpEnumCodeFactory;

/**
 * @ClassName UserExceptionEnum
 * @Description 系统用户相关异常枚举
 * @Auther: zhijianpu
 * @Date: 2023/5/25
 */
@ExpEnumType(module = SysExpEnumConstant.SYS_MODULE_EXP_CODE, kind = SysExpEnumConstant.SYS_USER_EXCEPTION_ENUM)
public enum UserExceptionEnum implements IBaseExceptionEnum, Assertion {

    /**
     * 用户不存在
     */
    USER_NOT_EXIST(1, "用户不存在"),

    /**
     * 账号已存在
     */
    USER_ACCOUNT_REPEAT(2, "账号已存在，请使用账号、密码登录"),
    I18N_MESSAGE_USER_ACCOUNT_REPEAT(2, "i18n_message_user_account_repeat"),

    /**
     * 原密码错误
     */
    USER_PWD_ERROR(3, "输入的原密码有误"),

    /**
     * 新密码与原密码相同
     */
    USER_PWD_REPEAT(4, "输入的新密码不能与原密码相同"),

    /**
     * 不能删除超级管理员
     */
    USER_CAN_NOT_DELETE_ADMIN(5, "不能删除超级管理员"),

    /**
     * 不能修改超级管理员状态
     */
    USER_CAN_NOT_UPDATE_ADMIN(6, "不能修改超级管理员状态");

    private final Integer code;

    private final String message;

    UserExceptionEnum(Integer code, String message) {
        this.code = code;
        this.message = message;
    }

    @Override
    public Integer getCode() {
        return ExpEnumCodeFactory.getExpEnumCode(this.getClass(), code);
    }

    @Override
    public String getMessage() {
        return message;
    }


    @Override
    public BaseException onAssertFailed(String errorMessage) {
        if (errorMessage == null || errorMessage.isEmpty()) {
            return new ServiceException(this);
        } else {
            return new ServiceException(this.getCode(), errorMessage);
        }
    }

}
